#!/bin/bash
set -e  # 命令执行失败时自动退出，确保错误被捕获

# 项目在容器内的根目录（根据实际路径调整，此处为用户提供的/var/www/html/mofingapi）
PROJECT_DIR="/var/www/html/mofingapi"

# 步骤1：进入项目目录，若目录不存在则报错退出
echo "===== 进入项目目录: $PROJECT_DIR ====="
cd "$PROJECT_DIR" || { echo "错误：项目目录 $PROJECT_DIR 不存在！"; exit 1; }


# 步骤2：解决 vendor 目录缺失（安装依赖并设置权限）
echo -e "\n===== 检查并安装项目依赖 ====="
if [ ! -d "vendor" ]; then
  echo "vendor 目录不存在，开始执行 composer install..."
  composer install --no-dev  # 生产环境不安装开发依赖
  echo "依赖安装完成，设置 vendor 设置权限和所有者及权限..."
  chown www-data:www-data vendor
  chmod -R 755 vendor  # 确保目录可读写执行
else
  echo "vendor 目录已存在，跳过依赖安装"
fi


# 步骤3：解决 logs 目录缺失（创建目录并设置权限）
echo -e "\n===== 检查并创建日志目录 ====="
LOG_DIR="$PROJECT_DIR/logs"
if [ ! -d "$LOG_DIR" ]; then
  echo "logs 目录不存在，开始创建..."
  mkdir -p "$LOG_DIR"  # -p 确保嵌套目录可创建
  echo "logs 目录创建完成，设置权限和所有者..."
  chmod 755 "$LOG_DIR"  # 目录权限：所有者读写执行，组和其他用户读执行
  chown www-data:www-data "$LOG_DIR"  # 匹配 PHP 进程用户
else
  echo "logs 目录已存在，跳过创建"
fi


# 步骤4：解决 tmp 目录及子目录缺失（CakePHP 标准缓存目录）
echo -e "\n===== 检查并创建 tmp 目录及子目录 ====="
TMP_DIR="$PROJECT_DIR/tmp"
# 定义需要创建的 tmp 子目录（CakePHP 必需的缓存、会话目录）
TMP_SUBDIRS=(
  "cache/persistent"
  "cache/models"
  "sessions"
  "tests"
)

# 创建 tmp 根目录及所有子目录
if [ ! -d "$TMP_DIR" ]; then
  echo "tmp 目录不存在，开始创建 tmp 及子目录..."
  # 先创建 tmp 根目录
  mkdir -p "$TMP_DIR"
  # 递归创建所有子目录（使用循环处理数组中的子目录路径）
  for subdir in "${TMP_SUBDIRS[@]}"; do
    mkdir -p "$TMP_DIR/$subdir"
  done
  echo "tmp 目录及子目录创建完成，设置权限和所有者..."
  # 设置 tmp 目录及所有子目录权限（递归）
  chmod -R 755 "$TMP_DIR"
  # 设置所有者为 PHP 进程用户（递归应用到所有子目录）
  chown -R www-data:www-data "$TMP_DIR"
else
  echo "tmp 目录已存在，检查子目录是否完整..."
  # 若 tmp 根目录存在，检查子目录是否缺失，缺失则补创建
  for subdir in "${TMP_SUBDIRS[@]}"; do
    subdir_path="$TMP_DIR/$subdir"
    if [ ! -d "$subdir_path" ]; then
      echo "子目录 $subdir_path 缺失，创建..."
      mkdir -p "$subdir_path"
      # 补创建后同步权限（避免权限不一致）
      chmod 755 "$subdir_path"
      chown www-data:www-data "$subdir_path"
    fi
  done
  echo "tmp 子目录检查完成"
fi


echo -e "\n===== 项目环境设置完成！====="